﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using DevExpress.Xpf.Core;
using DevExpress.Xpf.Bars;
using DevExpress.Xpf.Ribbon;
using DevExpress.Xpf.Layout.Core;
using DevExpress.Xpf.Docking;
using DevExpress.Xpf.NavBar;
using DevExpress.Xpf.Grid;
using DevExpress.Xpf.Printing;
using QuanLyKho.CommonControl;
using QuanLyKho.Server;
using QuanLyKho.Server.BLL;
using System.ComponentModel;
using System.Data;

namespace QuanLyKho
{
    public partial class MainWindow : DXWindow
    {
        PhieuNhapThuocBLL phieuNhapBLL;
        PhieuXuatThuocBLL phieuXuatBLL;

        public MainWindow()
        {
            try
            {
                InitializeComponent();

                phieuNhapBLL = new PhieuNhapThuocBLL();
                phieuXuatBLL = new PhieuXuatThuocBLL();

                // Hiển thị UserControl mặc định
                ShowUserControl("Nhập kho", @"ucNhapKho.xaml", false);

                // Lưu lại main window
                QuanLyKhoGlobal.MainWindow = this;

                BindDanhSachXuatNhapKho();
            }
            catch (Exception ex)
            {
                DXMessageBox.Show(ex.Message + "\n" + ex.InnerException + "\n" + ex.StackTrace, "Thông báo", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }

        private void BarManager_ItemClick(object sender, ItemClickEventArgs e)
        {
            switch (e.Item.Name)
            {
                #region Kho Hàng

                case "btnNhapKho":
                    ShowUserControl("Nhập kho", @"ucNhapKho.xaml", false);
                    break;
                case "btnXuatKho":
                    ShowUserControl("Xuất kho", @"ucXuatKho.xaml", false);
                    break;
                case "btnTraNo":
                    ShowUserControl("Quản lý tiền nợ", @"ucTienNo.xaml", false);
                    break;
                case "btnDSNhapKho":
                    ShowUserControl("DS nhập kho", @"ucDSNhapKho.xaml", true);
                    break;
                case "btnDSXuatKho":
                    ShowUserControl("DS xuất kho", @"ucDSXuatKho.xaml", true);
                    break;

                #endregion

                #region Thống kê

                case "btnThongKeTheKho":
                    ShowUserControl("TK Thẻ kho", @"ucThongKeTheKho.xaml", true);
                    break;
                case "btnThongKeTonKho":
                    ShowUserControl("TK Tồn kho", @"ucThongKeTonKho.xaml", true);
                    break;
                case "btnThongKeTienNo":
                    ShowUserControl("TK Tiền nợ", @"ucThongKeTienNo.xaml", true);
                    break;

                #endregion

                #region Danh Mục

                case "btnDmThuoc":
                    ShowUserControl("Thuốc", @"DanhMuc/ucDmThuoc.xaml", true);                    
                    break;
                case "btnDmDonViTinh":
                    ShowUserControl("Đơn vị tính", @"DanhMuc/ucDmDonViTinh.xaml", true);
                    break;
                case "btnDmHamLuong":
                    ShowUserControl("Hàm lượng", @"DanhMuc/ucDmHamLuong.xaml", true);
                    break;
                case "btnDmQuyCach":
                    ShowUserControl("Quy cách", @"DanhMuc/ucDmQuyCach.xaml", true);
                    break;
                case "btnDmNhaPhanPhoi":
                    ShowUserControl("Nhà phân phối", @"DanhMuc/ucDmNhaPhanPhoi.xaml", true);

                    break;

                #endregion

                #region Hệ Thống

                case "btnThoat":
                    Application.Current.Shutdown();
                    break;
                case "btnSaoLuuPhucHoiDuLieu":
                    ShowUserControl("Sao lưu phục hồi", @"frmSaoLuuPhucHoiDuLieu.xaml", true);
                    break;

                #endregion
            }
        }

        /// <summary>
        /// Trình diễn UserControl ra vị trí Panel chính: giữa màn hình
        /// </summary>
        /// <param name="caption">Tiêu đề của Tab</param>
        /// <param name="pathUserControl">Đường dẫn của Tab và tên UserControl</param>
        /// <param name="isAddTabUserControl">Là Add Tab mới</param>
        private void ShowUserControl(string caption, string pathUserControl, bool isAddTabUserControl)
        {
            BaseLayoutItem panelChoose = documentGroupMain.Items.FirstOrDefault(u => u.Caption == caption);
            if (panelChoose != null && isAddTabUserControl)
            {
                dockLayoutManagerMain.LayoutController.Activate(panelChoose);
                return;
            }

            // Nếu không phải là add thêm 1 tab mới thì xóa tất cả các tab đang tồn tại
            if (!isAddTabUserControl)
            {
                documentGroupMain.Clear();
                documentGroupMain.DestroyOnClosingChildren = true;
            }

            // Add 1 tab mới
            MainPanel = dockLayoutManagerMain.DockController.AddDocumentPanel(documentGroupMain
                                                                                , new Uri(pathUserControl, UriKind.Relative));
            // Hiển thị tiêu đề của tab
            MainPanel.Caption = caption;
            DocumentPanel.SetMDISize(MainPanel, new Size(400, 300));
            DocumentPanel.SetMDILocation(MainPanel, new Point(200, 200));

            // Show User Control
            dockLayoutManagerMain.LayoutController.Activate(MainPanel);
        }


        public void BindDanhSachXuatNhapKho()
        {
            QuanLyKhoGlobal.ListPhieuNhapThuoc = new BindingList<PhieuNhapThuoc>(phieuNhapBLL.RetrieveTop10());
            lbNhapKho.ItemsSource = QuanLyKhoGlobal.ListPhieuNhapThuoc;

            QuanLyKhoGlobal.ListPhieuXuatThuoc = new BindingList<PhieuXuatThuoc>(phieuXuatBLL.RetrieveTop10());
            lbXuatKho.ItemsSource = QuanLyKhoGlobal.ListPhieuXuatThuoc;
        }

        public void RefreshPhieuNhap()
        {
            lbNhapKho.ItemsSource = null;
            lbNhapKho.ItemsSource = QuanLyKhoGlobal.ListPhieuNhapThuoc;
        }

        public void RefreshPhieuXuat()
        {
            lbXuatKho.ItemsSource = null;
            lbXuatKho.ItemsSource = QuanLyKhoGlobal.ListPhieuXuatThuoc;
        }

        private void lbNhapKho_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (this.lbNhapKho.SelectedIndex != -1)
            {
                PhieuNhapThuoc phieuNhap = this.lbNhapKho.Items[this.lbNhapKho.SelectedIndex] as PhieuNhapThuoc;
                if (phieuNhap != null)
                {
                    ShowUserControl("Nhập kho", @"ucNhapKho.xaml", false);
                    ucNhapKho control = MainPanel.Control as ucNhapKho;
                    if (control != null)
                    {
                        control.phieuNhapCurrent = phieuNhap;
                    }
                }
            }
        }

        private void lbXuatKho_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (this.lbXuatKho.SelectedIndex != -1)
            {
                PhieuXuatThuoc phieuXuat = this.lbXuatKho.Items[this.lbXuatKho.SelectedIndex] as PhieuXuatThuoc;
                if (phieuXuat != null)
                {
                    ShowUserControl("Xuất kho", @"ucXuatKho.xaml", false);
                    ucXuatKho control = MainPanel.Control as ucXuatKho;
                    if (control != null)
                    {
                        control.phieuXuatCurrent = phieuXuat;
                    }
                }
            }
        }

        private void DXWindow_Loaded(object sender, RoutedEventArgs e)
        {
            DXSplashScreen.Close();
            this.Activate();
        }
    }
}
